package com.frank.towerrush.split;

import java.util.List;

import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;

/**
 * 塔
 * 
 * @author Frank
 *
 */
public class Tower extends Location {
    /**
     * 名字
     */
    private String name;
    /**
     * 信息
     */
    private String info;
    /**
     * 图片
     */
    private Bitmap image;
    /**
     * 子弹的图片
     */
    private Bitmap bullet;

    /**
     * 伤害
     */
    private int dmg = 10;
    /**
     * 射速
     */
    private int speed = 10;
    /**
     * 射程
     */
    private int range = 1000;

    public static List<Monster> mList;

    public static void setMonsterList(List<Monster> mList) {
        Tower.mList = mList;
    }

    /**
     * 塔的构造方法
     * 
     * @param name
     *            名字
     * @param info
     *            信息
     * @param image
     *            图片
     */
    public Tower(String name, String info, Bitmap image, Bitmap bullet, int x, int y) {
        super(new Flag(x, y));
        this.name = name;
        this.info = info;
        this.image = image;
        this.bullet = bullet;
        init();
    }

    /**
     * 初始化
     */
    private void init() {
        setSize(image.getHeight(), image.getWidth());
    }

    /**
     * @return 塔的名字
     */
    public String getName() {
        return name;
    }

    /**
     * @return 塔的信息
     */
    public String getInfo() {
        return info;
    }

    /**
     * @return 塔的图片
     */
    public Bitmap getImage() {
        return image;
    }

    /**
     * @return 子弹的图片
     */
    public Bitmap getBullet() {
        return bullet;
    }

    /**
     * 判断目标是否在射程以内
     * 
     * @param m
     *            目标
     * @return 结果
     */
    public boolean inRange(Monster m) {
        double distance = getLoc().distance(m.getLoc());
        return distance <= range;
    }

    /**
     * 索敌
     * 
     * @param mList
     *            怪物列表
     * @return 攻击目标
     */
    public Monster findTarget() {
        for (Monster m : mList) {
            if (inRange(m)) {
                return m;
            }
        }
        return null;
    }

    /**
     * 射出一发子弹
     * 
     * @return 射出的子弹
     */
    public Bullet shoot() {
        Monster m = findTarget();
        if (m == null) {
            return null;
        }
        return new Bullet(getLoc(), m, bullet, dmg, speed * 10);
    }

    public void paint(Canvas canvas, Paint paint, int refresh, List<Bullet> bullets) {
        canvas.drawBitmap(image, null, getRectF(), paint);
        Bullet b = shoot();
        if (b != null) {
            bullets.add(b);
        }
    }
}
